1
Oltre le operazioni element-wise: Il passaggio alle operazioni matriciali a blocchi
AI023Lesson 9
00:00

In lezioni precedenti, ci siamo concentrati su operazioni element-wise (come un'operazione ReLU di base su una matrice). Queste sono limitate dalla memoria perché la GPU trascorre più tempo nel trasferimento dei dati dalla HBM ai registri che nell'esecuzione delle operazioni matematiche.

1. Perché GEMM è centrale

La moltiplicazione generale di matrici (GEMM) ha una complessità computazionale di $O(N^3)$ pur richiedendo solo $O(N^2)$ accessi alla memoria. Ciò ci permette di nascondere la latenza della memoria dietro un'ampia capacità di elaborazione aritmetica, rendendola il "battito" dei modelli linguistici (LLMs).

2. Rappresentazione della memoria in 2D

La RAM fisica è monodimensionale. Per rappresentare un tensore in 2D, usiamo passi (strides). Un errore comune in produzione è supporre che un tensore sia contiguo. Se confondi i passi riga e colonna nella tua matematica dei puntatori, accederai a dati "fantasma" o innesterai violazioni di memoria.

3. Generalizzazione tramite blocchi

Triton generalizza la logica element-wise passando da puntatori singoli a blocchi di puntatori. Usando tile bidimensionali (ad esempio $16 \times 16$), sfruttiamo riutilizzo dei dati nella SRAM ad alta velocità, mantenendo i dati "caldi" per operazioni fuse come l'aggiunta del bias o le attivazioni prima di scrivere nuovamente nella memoria globale.

Disposizione lineare 1DDisposizione a blocchi 2D
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>